1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | Vib% = 0 ' Текущий выбор Drw% = 1 ' Нарисуем меню в самом начале DO ' Это бесконечный цикл с постусловием Kb$ = INKEY$ ' Это получение кодов нажатых клавиш ' т.е. если клавиша была нажата, её ' код в строковом выражении запишется ' в строковую переменную Kb$, а если ' не было нажатий клавиш, то соотв. ' переменная будет пустым значением. ' Это мы проверяем нажата ли клавиша вверх(смотрим Kb$) ' и отнимаем единицу от значения выбранного пункта, если ' его значение больше нуля, т.е. не даём выйти за ноль. ' После изменения значения, ставим флаг отрисовки меню IF Kb$ = CHR$( 0 ) + "H" AND Vib% > 0 THEN Vib% = Vib% - 1 : Drw% = 1 ' Это мы проверяем нажата ли клавиша вниз ' и прибавляем единицу к значению выбранного пункта, если ' его значение меньше двух, т.е. мы ограничиваем кол-во ' пунктов тремя значениями: 0 , 1 , 2 ' Также после изменения значения, ставим флаг отрисовки меню IF Kb$ = CHR$( 0 ) + "P" AND Vib% < 2 THEN Vib% = Vib% + 1 : Drw% = 1 ' Тут будет выбор пункта меню ENTER' ом IF Kb$ = CHR$( 13 ) THEN ' Пусть надпись выводится вверху, жёлтым цветом LOCATE 1 , 1 : COLOR 14 ' Селект кейзу скармливаем переменную, ' по значению которой нужно произвести выбор ' Далее пишем CASE , номер пункта и код для выполнения ' Двоеточие равносильно переводу на другую строку, т.е. ' если бы мы писали код на следующей строке. SELECT CASE Vib% CASE 0 : PRINT "Punkt 1 " CASE 1 : PRINT "Punkt 2 " CASE 2 : PRINT "Punkt 3 " CASE ELSE ' Этой строчки требуют некоторые компиляторы ' по сути это исключающее условие, т.е. если ' ни один пункт не выбран, то выполнится код ' между CASE ELSE и END SELECT(однако этого ' никогда не произойдёт). END SELECT END IF ' Это условие отрисовки меню ' после изменения выбранного пункта ' оно единоразово выполняется IF Drw% = 1 THEN ' Сбросим флаг отрисовки, чтобы не ' выполнять мног раз. Нам нужно ' перерисовывать меню только тогда, Drw% = 0 ' когда выбранный пункт изменился. ' Тут ставим позицию печати в заданную точку(LOCATE) ' и проверяем ровняется ли значение выбранного пункта ' значению пункта который в тек. момент отрисовываем. ' Если ровняется, значит это и есть выбранный пункт, ' помечаем его особым цветом( 11 ), в противном случае ставим ' ему обычный цвет( 8 ). ' Цвет задаётся оператором COLOR ' Пункт 1 LOCATE 5 , 10 : IF Vib% = 0 THEN COLOR 11 ELSE COLOR 8 ' Печатаем наш пункт PRINT "Punkt 1 " ' Пункт 2 LOCATE 6 , 10 : IF Vib% = 1 THEN COLOR 11 ELSE COLOR 8 ' Печатаем наш пункт PRINT "Punkt 2 " ' Пункт 3 LOCATE 7 , 10 : IF Vib% = 2 THEN COLOR 11 ELSE COLOR 8 ' Печатаем наш пункт PRINT "Punkt 3 " END IF ' Конец отрисовки меню ' Тут код цикла заканчивается ' Заодно поставим постусловие на выход из цикла ' по нажатию клавиши ESCAPE LOOP UNTIL Kb$ = CHR$( 27 ) CLS ' Очистим экран, дальше никаких END' ов не надо ' интерпретатор и так поймёт что это конец программы. |
Тестирование выполнено в программе QB64 ( Скачать )